const os = require('os') // 引入系统操作模块，提供操作系统相关的信息
const express = require('express') // 引入Express框架，用于创建Web服务器
const app = express() // 创建Express应用实例
const axios = require('axios') // 引入axios模块，用于发送HTTP请求

// 设置视图模板目录和模板引擎为HTML
app.set('views', __dirname + './')
app.set('view engine', 'html')

// 中间件：允许跨域访问（CORS设置）
app.use(function(req, res, next) {
    res.set({
        'Access-Control-Allow-Origin': '*', // 允许所有域名访问
        'Access-Control-Allow-Methods': 'GET,POST', // 允许的请求方法
        'Access-Control-Allow-Headers': 'X-Requested-With,content-type, Authorization' // 允许的请求头
    })
    next() // 继续执行下一个中间件或路由
})

// 静态文件托管：提供当前目录下的静态文件
app.use('/', express.static('./'))

// 定义/posts路由，模拟获取帖子数据
app.get('/posts', function(req, res) {
    console.log('请求成功')
    axios({
        method: 'get', // 请求方式为GET
        url: 'https://jsonplaceholder.typicode.com/posts', // JSONPlaceholder API地址，获取帖子数据
    }).then(response => {
        // 将返回的数据发送给客户端
        res.send(response.data)
    }).catch(err => {
        // 如果请求失败，返回错误信息
        res.send(err)
    })
})

// 定义/users路由，模拟获取用户数据
app.get('/users', function(req, res) {
    axios({
        method: 'get', // 请求方式为GET
        url: 'https://jsonplaceholder.typicode.com/users', // JSONPlaceholder API地址，获取用户数据
    }).then(response => {
        // 将返回的数据发送给客户端
        res.send(response.data)
    }).catch(err => {
        // 如果请求失败，返回错误信息
        res.send(err)
    })
})

// 启动服务器，监听端口3066
app.listen(3066, function() {
    // 获取本地网络接口信息并输出IPv4地址
    if (os.networkInterfaces()['WLAN']) { // 处理无线网络接口
        os.networkInterfaces()['WLAN'].forEach(item => {
            if (item.family == 'IPv4') {
                console.log(item.address + ':3066') // 打印IPv4地址和端口
                return
            }
        })
    }

    if (os.networkInterfaces()['以太网']) { // 处理以太网网络接口
        os.networkInterfaces()['以太网'].forEach(item => {
            if (item.family == 'IPv4') {
                console.log(item.address + ':3066') // 打印IPv4地址和端口
                return
            }
        })
    }
})
